package com.bjsxt;
/**线程的优先级
 * 每一个线程都是有优先级的，我们可以为每一个线程定义线程的优先级，但这样并
 * 不能保证高优先级的线程会在低优先级的线程前执行，线程的优先级用数字表示，范围
 * 从1到10一，一个线程的默认值是5
 * java的线程优先级调度会委托给操作系统去处理，所以具体的操作系统优先级有关，
 * 如非特别需要，一般无需设置线程优先级
 * 注意：线程的优先级，不是说哪个线程优先执行，如果设置某个线程的优先级高，那就
 * 是有可能被执行的概率高，并不是优先执行*/
/*int getPriority()  获得线程优先级的级数  返回整数类型
* void setPriority(int newPriority)   设置优先级，无返回值*/

class Priority implements Runnable{
    private int run =0;//用来计数
    //用来关闭线程
    private boolean flag =true;
    @Override
    public void run() {
        while (this.flag){
            System.out.println(Thread.currentThread().getName()+" "+run++);
        }
    }
    public void stop(){
        this.flag=false;
    }
}



public class PriorityThread {
    public static void main(String[] args) throws Exception{
        Priority p1 = new Priority();
        Priority p2 = new Priority();
        //可以在构造方法中设置名字
        Thread t1 = new Thread(p1,"oneThread");
        Thread t2 = new Thread(p2,"twoThread");
       // System.out.println(t1.getPriority());//默认是5
        //设置优先级，要在线程启动前设置
        t1.setPriority(Thread.MAX_PRIORITY); //优先级为10
        t2.setPriority(Thread.NORM_PRIORITY);//优先级为1

        t1.start();
        t2.start();
        //让主线程休眠一秒
        Thread.sleep(5000);
        //关闭线程
        p1.stop();
        p2.stop();
    }
}
